$(function () {
    $('#dg_role').datagrid({
                               onSelect: onSelectDgRole
                           })
})

/**
 * 点击角色列表中的一行数据时调用的事件
 * @param index
 * @param data
 */
function onSelectDgRole(index, row) {
    //把原来的树形数据给清空
    $('#menu_tree_role').tree('loadData', {});
    //重新加载右侧的菜单树
    init_menu_tree_role(row.id);
}

/**
 * 初始化右侧的树形菜单
 * @param roleId
 */
var init_menu_tree_role = function (roleId) {
    $('#menu_tree_role').tree({
                                  url: ctx + "/sys/limit/role_menu/" + roleId,//后台返回属形数据的url
                                  method: 'get',
                                  checkbox: true,//在树形菜单前面加上一个多选框
                                  cascadeCheck:false,//不做级联检查，选中一个不自动选中子菜单，也不将父级作为半勾选
                                  onBeforeCheck: function (node, checked) {//事件：在选中一个菜单之前运行。我们用来和后台交互，去存储数据库数据
                                      //这个事件如果返回了false，则会阻止用户的操作（勾选，取消勾选）
                                      //获取到当前选中的角色，以便取角色ID
                                      var selected = $('#dg_role').datagrid('getSelected');
                                      //取到当前用户选中的菜单ID（递归去取到所有的子菜单），然后转为一个字符串
                                      var idArr = [node.id];
                                      //提交到后台保存，并返回是否保存成功
                                      return saveRoleLimit(checked, selected.id, idArr);
                                  }
                              });
}

/**
 * 和后台交互，在数据中存储权限。
 * @param checked
 * @param roleId
 * @param menuIds
 * @return 是否保存成功
 */
function saveRoleLimit(checked, roleId, menuIds) {
    var isSuccess = false;
    $.ajax({
               url: ctx + '/sys/limit/role_menu',
               type: 'put',
               contentType: 'application/json',
               dataType: 'json',
               data: JSON.stringify({checked: checked, roleId: roleId, menuIds: menuIds}),
               async: false,//设置这个ajax为同步。由于给外层函数要使用ajax返回的结果，所以必须同步。
               success: function (data) {
                   isSuccess = data.success;
               },
               error: function (xhr) {
                   $.messager.alert('系统提示', "服务器连接失败");
               }
           });
    return isSuccess;
}